package com.health.manage.util;

import com.alibaba.fastjson.JSONArray;

import java.util.Collection;
import java.util.List;
import java.util.Map;


/**
 *
 * @Description: 常用的工具类
 * @author: user
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils{

	/** 空字符串 */
	private static final String NULLSTR = "";


	/**
	 * * 判断一个字符串是否为空串
	 *
	 * @param str String
	 * @return true：为空 false：非空
	 */
	public static boolean isEmpty(String str)
	{
		return isNull(str) || NULLSTR.equals(str.trim());
	}

	/**
	 * * 判断一个字符串是否为非空串
	 *
	 * @param str String
	 * @return true：非空串 false：空串
	 */
	public static boolean isNotEmpty(String str)
	{
		return !isEmpty(str);
	}

	/**
	 * * 判断一个对象是否为空
	 *
	 * @param object Object
	 * @return true：为空 false：非空
	 */
	public static boolean isNull(Object object)
	{
		return object == null;
	}

	/**
	 * * 判断一个对象是否非空
	 *
	 * @param object Object
	 * @return true：非空 false：空
	 */
	public static boolean isNotNull(Object object)
	{
		return !isNull(object);
	}

	/**
	 * * 判断一个对象是否是数组类型（Java基本型别的数组）
	 *
	 * @param object 对象
	 * @return true：是数组 false：不是数组
	 */
	public static boolean isArray(Object object)
	{
		return isNotNull(object) && object.getClass().isArray();
	}

	/**
	 * 去空格
	 */
	public static String trim(String str)
	{
		return (str == null ? "" : str.trim());
	}

	/**
	 * 判断输入的字符串是否为null，如果是null则返回"",否则，返回原字符串。
	 *
	 * @param str
	 * @return
	 */
	public static String null2String(String str) {
		if (isNullString(str)) {
			return "";
		} else return str;
	}

	public static boolean isNullString(String str) {
		if (str == null || str.trim().equals("") || str.trim().equalsIgnoreCase("NULL")) return true;
		else return false;
	}

	/**
	 * 判断输入的对象是否为null，如果是null则返回"",否则，返回 对象.toString()。
	 *
	 * @param
	 * @return
	 */
	public static String obj2String(Object obj) {
		return obj == null ? "" : obj.toString();
	}

	/**
	 * 可以用于判断 Map,Collection,String,Array,Long是否为空
	 *
	 * @param o
	 *            java.lang.Object.
	 * @return boolean.
	 */
	@SuppressWarnings("unused")
	public static boolean isEmpty(Object o) {
		if (o == null)
			return true;
		if (o instanceof String) {
			if (((String) o).trim().length() == 0) {
				return true;
			}
		} else if (o instanceof JSONArray) {
			if (((JSONArray) o).size() == 0) {
				return true;
			}
		} else if (o instanceof Collection) {
			if (((Collection) o).isEmpty()) {
				return true;
			}
		} else if (o.getClass().isArray()) {
			if (((Object[]) o).length == 0) {
				return true;
			}
		} else if (o instanceof Map) {
			if (((Map) o).isEmpty()) {
				return true;
			}
		} else if (o instanceof Long) {
			if (((Long) o) == null) {
				return true;
			}
		} else if (o instanceof Short) {
			if (((Short) o) == null) {
				return true;
			}
		}else if (o instanceof List) {
			if (((List) o).isEmpty() || ((List) o).size() == 0) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 判断是否为数字
	 *
	 * @param o
	 * @return
	 */
	public static boolean isNumber(Object o) {
		if (o == null)
			return false;
		if (o instanceof Number) {
			return true;
		}
		if (o instanceof String) {
			try {
				Double.parseDouble((String) o);
				return true;
			} catch (NumberFormatException e) {
				return false;
			}
		}
		return false;
	}


	/**
	 * 可以用于判断 Map,Collection,String,Array是否不为空
	 *
	 * @param o
	 * @return
	 */
	public static boolean isNotEmpty(Object o) {
		return !isEmpty(o);
	}

	public static boolean isNotEmpty(Long o) {
		return !isEmpty(o);
	}


}

